LeetCode 866. Prime Palindrome

866.Prime Palindrome(回文素数)

链接

https://leetcode-cn.com/problems/prime-palindrome/

题目

求出大于或等于 N 的最小回文素数。

回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是 素数

例如,2,3,5,7,11 以及 13 是素数。

回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是 回文数。

例如,12321 是回文数。

思路

思路还是挺清晰的,从给入数字向上检索,如果既是回文数,又是素数,就直接输出,如果不满足条件,那么就增加数字,继续判断。

这里有一个小问题,就是所有偶数位的回文数,都可以被11整除,至于证明。。。。。咱也不知道,咱也不敢问,所有如果发现这个数是偶数位,那么直接进一位,首数字和尾数字全为1,继续判断。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

public static int primePalindrome(int N) {
if (N <= 2) {
return 2;
} else if (N <= 3) {
return 3;
} else if (N <= 5) {
return 5;
} else if (N <= 7) {
return 7;
} else if (N <= 11) {
return 11;
}

for (int i = N; ; ) {
if (isHui(i) && isPrime(i)) {
return i;
}

if ((i + "").length() % 2 == 0) {
i = (int) (Math.pow(10, (i + "").length()) + 1);
} else {
i++;
}

}
}

public static boolean isPrime(int i) {
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
return false;
}
}
return true;
}

public static boolean isHui(int s) {
String str = s + "";
int len = str.length();
for (int j = 0; j < len / 2; j++) {
if (str.charAt(j) != str.charAt(len - j - 1)) {
return false;
}
}
return true;
}
---本文结束,感谢阅读---